/*
 * The contents of this file are subject to the Mozilla Public License Version
 * 1.1 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * http://www.mozilla.org/MPL/
 *
 * Software distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
 * for the specific language governing rights and limitations under the
 * License.
 *
 * The Original Code is the FxStruts MailReader Application.
 *
 * The Initial Developer of the Original Code is
 * Anirudh Sasikumar (http://anirudhs.chaosnet.org/).
 * Portions created by the Initial Developer are Copyright (C) 2008
 * the Initial Developer. All Rights Reserved.
 *
 * Contributor(s):
 *
*/

package com.adobe.mailreader.command
{
    import com.adobe.cairngorm.commands.ICommand;
    import com.adobe.cairngorm.control.CairngormEvent;
    import com.adobe.mailreader.business.LoginDelegate;
    import com.adobe.mailreader.events.MailLoginEvent;
    import com.adobe.mailreader.model.MailModelLocator;
    
    import mx.rpc.IResponder;
    import mx.rpc.events.FaultEvent;
    
    /* Login/logout support */
    public class MailLoginCommand implements ICommand, IResponder
    {
    	private var login:Boolean = true;
        
        public function MailLoginCommand()
        {
            
        }
        
        public function execute( event:CairngormEvent ):void
        {
            var loginEvt:MailLoginEvent = event as MailLoginEvent;
            
            if ( loginEvt )
            {
                var loginDelegate:LoginDelegate = new LoginDelegate(this);
                var model : MailModelLocator = MailModelLocator.getInstance(); 
                
                
                if ( loginEvt.type == MailLoginEvent.EVENT_AGENT_LOGIN )
                {
                    loginDelegate.doLogin(loginEvt.loginData.username, loginEvt.loginData.password);
                }
                else if ( loginEvt.type == MailLoginEvent.EVENT_AGENT_LOGOUT )
                {
                    login = false;
                    loginDelegate.doLogout();
                }
            }
            else
                trace("bad event to agentlogin");
            trace(event.data);
        }
        
        private function loggedOut():void
        {
            var model : MailModelLocator = MailModelLocator.getInstance();
            clearUserFromModel(model);
            model.notifyView(MailModelLocator.VIEW_LOGGED_OUT_STATE);
        }
        
        /* reset logged in session details from model */
        private function clearUserFromModel(model : MailModelLocator):void
        {
            
            model.fromAddress = "";
            model.fullName = "";
            model.replyToAddress = "";
            model.userName = "";                	
            model.mailSubscriptions = null;
            model.transactionToken = null;
        }
        
        public function result( event : Object ) : void
        {				
            trace("Got result " + event.result);
            
            var model : MailModelLocator = MailModelLocator.getInstance(); 
            if ( event.result == "true" )
            {
                if ( login )
                {                		
                    model.notifyView(MailModelLocator.VIEW_LOGGED_IN_STATE);
                }
                else
                {
                    loggedOut();
                }                	
            }
            else
            {
                if ( login )
                {
                    model.notifyView(MailModelLocator.VIEW_LOGIN_FAILED);
                }
                else
                {
                    trace("Logout failed");
                    loggedOut();
                }
                
            }        
        }
        
        public function fault( event : Object ) : void
        {
            trace("Got fault" + event);
            var model : MailModelLocator = MailModelLocator.getInstance();
            
            if ( login )
            {
                model.notifyView(MailModelLocator.VIEW_LOGIN_FAILED, (event as FaultEvent).fault.faultString);
            }
            else
            {
                loggedOut();   
            }
        }
        
    }
}